"""
【树形】
组合模式(Composite Pattern): 将对象组合成树形结构以表示“整体-部分”层次结构。

使得客户端可以像处理单个对象一样处理对象组合。
例如，在一个文件系统中，一个文件夹可以包含多个文件和子文件夹，可用组合模式来表示这个文件系统的结构。
"""


class File:
    def __init__(self, name):
        self.name = name

    def display(self, indent=''):
        print(f"{indent}- {self.name}")


class Folder:
    def __init__(self, name):
        self.name = name
        self.children = []

    def add(self, child):
        self.children.append(child)

    def remove(self, child):
        self.children.remove(child)

    def display(self, indent=''):
        print(f"{indent}+ {self.name}")
        for child in self.children:
            child.display(indent + '  ')


folder1 = Folder("Folder 1")
folder2 = Folder("Folder 2")
file1 = File("File 1")
file2 = File("File 2")
file3 = File("File 3")

folder1.add(file1)
folder1.add(folder2)
folder2.add(file2)
folder2.add(file3)

folder1.display()
'''
+ Folder 1
  - File 1
  + Folder 2
    - File 2
    - File 3
'''